// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '../static/css/ElementUi.css'
import axios from 'axios';

axios.defaults.baseURL = "http://192.168.40.38:8080";

Vue.config.productionTip = false
Vue.use(ElementUI)
Vue.prototype.$http = axios;

// 合并后的请求拦截器（只需要一个）
axios.interceptors.request.use(
  (config) => {
    // 从 localStorage 获取登录信息
    const loginUser = JSON.parse(localStorage.getItem("loginUser")) || {};

    // 添加 token 到请求头（注意字段名称统一）
    if (loginUser.token) {
      config.headers['token'] = loginUser.token; // 保持与后端约定的一致
    }

    console.log('请求拦截:', config);
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 增强后的响应拦截器
axios.interceptors.response.use(
  (response) => {
    console.log('响应拦截:', response);
    // 检查响应头是否有新 token
    const newToken = response.headers['token']; // 兼容不同大小写
    console.log('响应头:', response.headers);
    console.log(newToken);
    if (newToken) {
      console.log('新 Token:', newToken);
      // 更新 localStorage
      const loginUser = JSON.parse(localStorage.getItem("loginUser")) || {};
      loginUser.token = newToken;
      localStorage.setItem("loginUser", JSON.stringify(loginUser));
      console.log('Token 已更新:', newToken);
    }

    // 处理业务状态码
    const res = response.data;
    if (res.code === 401) {
      // 清除失效 token
      localStorage.removeItem("loginUser");
      router.push('/login');
    }

    return response;
  },
  (error) => {
    console.log('错误拦截:', error);
    // 统一错误处理
    if (error.response) {
      switch (error.response.status) {
        case 401:
          localStorage.removeItem("loginUser");
          router.push('/login');
          break;
        case 500:
          console.error('服务器内部错误');
          break;
        // 添加其他状态码处理...
      }
    }
    return Promise.reject(error);
  }
);



/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
